package edu.fasta.sisinfo2.net;

import edu.fasta.sisinfo2.poker.PokerController;
import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.Socket;

public class Cliente extends Thread{    

	private Socket cliente;
	private ObjectOutputStream salida;
	private ObjectInputStream entrada;   
	private String host;
	private int port;

	private PokerController control;

	public Cliente( String host , int port ){ 

		this.host = host;
		this.port = port;
		control = PokerController.getInstance();
		//control.crearJugador(nroJugador);   
	}

	public void run() {

		try {
			conectarAServidor();
			obtenerFlujos();
			procesarConexion();

		} catch (EOFException exEOF) {
			System.err.println("El cliente termino la conexion");
			cerrarConexion();
		}
		catch (IOException excepcionES) {
			System.out.println("error de entrada/ salida :");
			excepcionES.printStackTrace();
		}

		finally{
			cerrarConexion();
		}
	}

	private void conectarAServidor() throws IOException {
		System.out.println("Intentando realizar conexion\n");

		// crear Socket para realizar la conexion con el servidor - nueva IP
		//192.168.56.2
		cliente = new Socket(InetAddress.getByName( getHost() ) , getPort()); // address , puerto

		System.out.println("Conectado a: " + cliente.getInetAddress().getHostName());
	}

	private void obtenerFlujos() throws IOException {
		// establecer flujo de salida para los objetos
		salida = new ObjectOutputStream(cliente.getOutputStream());
		salida.flush(); // vaciar buffer de salida para enviar informaci�n de encabezado

		// establecer flujo de entrada para los objetos
		entrada = new ObjectInputStream(cliente.getInputStream());

		System.out.println("\nSe recibieron los flujos de E/S\n");
	}
// TODO falta el procesar la conexion.
	private void procesarConexion() throws IOException {
		Comando jugada = null;
		int retorno = 0;
//		do {
//		} while ();

	}

	public void cerrarConexion() {    
		System.out.println("\nSe cerro la conexion");
		try {
			salida.close();
			entrada.close();
			cliente.close();
		} catch (IOException exES) {
			exES.printStackTrace();
		}        
	}

	public void enviarDatos(Comando mensaje) {
		try {
			salida.writeObject( mensaje );
			salida.flush();
			System.out.println("\n CLIENTE:" + mensaje.toString() );
		} catch (IOException exES) {
			System.out.println("\nError al escribir el objeto"+ exES);
		}
	}


	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public int getPort() {
		return port;
	}

	public void setPort(int port) {
		this.port = port;
	}
}